# Makefile for C++11 Hierarchical Cache System
# 分层缓存系统编译配置

CXX = g++
CXXFLAGS = -std=c++11 -Wall -O2 -pthread
CXXFLAGS_DEBUG = -std=c++11 -Wall -g -pthread -DDEBUG

# 主要目标
TARGETS = cache_demo

# 如果系统支持C++17，可以编译完整版本
ifeq ($(shell $(CXX) -std=c++17 -dM -E -x c++ /dev/null 2>/dev/null | grep -c __cplusplus),1)
    TARGETS += main
    CXXFLAGS_FULL = -std=c++17 -Wall -O2 -pthread
endif

# 头文件
HEADERS = cache_interface.h lru_cache.h memory_cache.h disk_cache.h hierarchical_cache.h

# 默认目标
all: $(TARGETS)

# 编译简化版演示程序（C++11兼容）
cache_demo: cache_demo.cpp $(HEADERS)
	@echo "编译简化版演示程序（C++11）..."
	$(CXX) $(CXXFLAGS) cache_demo.cpp -o cache_demo

# 编译完整版演示程序（需要C++17）
main: main.cpp $(HEADERS)
	@echo "编译完整版演示程序（C++17）..."
	$(CXX) $(CXXFLAGS_FULL) main.cpp -o main

# 调试版本
debug: CXXFLAGS = $(CXXFLAGS_DEBUG)
debug: cache_demo

# 运行简化版演示
run: cache_demo
	@echo "运行缓存系统演示..."
	@./cache_demo

# 运行完整版演示（如果存在）
run-full: main
	@echo "运行完整版缓存系统演示..."
	@./main

# 清理编译产物
clean:
	@echo "清理编译产物..."
	rm -f cache_demo main
	rm -rf cache disk_cache hier_cache
	rm -f *.o

# 清理所有（包括缓存目录）
clean-all: clean
	@echo "清理所有缓存目录..."
	rm -rf ./cache ./disk_cache ./hier_cache

# 帮助信息
help:
	@echo "可用的make目标："
	@echo "  make         - 编译所有可用的程序"
	@echo "  make cache_demo - 编译简化版演示程序（C++11）"
	@echo "  make main    - 编译完整版演示程序（需要C++17）"
	@echo "  make debug   - 编译调试版本"
	@echo "  make run     - 运行简化版演示"
	@echo "  make run-full - 运行完整版演示"
	@echo "  make clean   - 清理编译产物"
	@echo "  make clean-all - 清理所有（包括缓存目录）"
	@echo "  make help    - 显示此帮助信息"

.PHONY: all clean clean-all run run-full debug help